<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    /**
     *function,RegExp,undefined不可以拷贝
     * 最简单的深拷贝(JSON.stringify() 和JSON.parse())
     先把对象使用JSON.stringify()转为字符串，再赋值给另外一个变量，然后使用JSON.parse()转回来即可。
     *
     *可以实际应用
     * 对象内部的对象也可以深拷贝
     */

    function deepCloneByJSON(object) {

        let resultObject =JSON.parse( JSON.stringify(object) );
        return resultObject;
    }

    let object1 = {
        num:1,
        str:'string',
        nul:null,
        regexp:new RegExp('test'),
        undef:undefined,
        arr:[1,'1','a',[1,'1','a'],{
            num:1,
            arr:[1,{
                num:1
            }]
        }],
        obj:{
            num:1,
            str:'string',
            arr:[1,'1','a',[1,'1','a'],{num:1,arr:[1]}]
        },
        fn:function(){
            console.log(1+2)
            return 'func1'
        }
    }

    let object2 = deepCloneByJSON(object1)

    object2.num = 2
    object2.arr[0] = 2
    object2.arr[3][0] = 2
    object2.arr[4].num = 2
    object2.arr[4].arr[0] = 2
    object2.arr[4].arr[1].num = 2
    object2.obj.num = 2
    object2.obj.arr[0] = 2
    object2.obj.arr[3][0] = 2
    object2.obj.arr[4].num = 2
    object2.obj.arr[4].arr[0] = 2
    //object2.fn = function(){return "func2"}

    console.log(object1,object2)
    console.log(JSON.stringify(object1))
    console.log(JSON.stringify(object2))
    console.log(object1.fn(),object2.fn())

</script>
</html>